package com.bsg.upm.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.bsg.upm.entity.OrderEntity;

/**
 * 订单接口
 * 
 * @author HCK
 *
 */
public interface OrderDao extends CrudDao<OrderEntity> {

	/**
	 * 获取指定工单的基本信息
	 * 
	 * @param id
	 *            工单编码
	 * @return 工单对象
	 */
	OrderEntity getBase(String id);

	/**
	 * 获取指定服务对应的工单信息
	 * 
	 * @param servId
	 *            服务编码
	 * @return
	 */
	OrderEntity getByServId(String servId);

	/**
	 * 获取指定服务名称的最大序号
	 * 
	 * @param servName
	 *            服务名称
	 * @return 最大序号
	 */
	int getMaxNoBySiteIdAndServName(@Param("siteId") String siteId, @Param("servName") String servName);

	/**
	 * 获取指定站点和服务名称的创建型工单个数
	 * 
	 * @param siteId
	 *            站点编码
	 * @param servName
	 *            服务名称
	 * @return 工单个数
	 */
	int countBySiteIdAndServName(@Param("siteId") String siteId, @Param("servName") String servName);

	/**
	 * 获取被指定工单关联的工单个数
	 * 
	 * @param orderId
	 *            工单编码
	 * @return 被关联的工单个数
	 */
	int countBeAssociate(String orderId);

	/**
	 * 获取指定子系统的工单个数
	 * 
	 * @param subSystem
	 *            子系统编码
	 * @return 工单个数
	 */
	int countBySubSystemId(String subSystemId);

	/**
	 * 保存和子系统的关系
	 * 
	 * @param order
	 *            工单
	 * @return
	 */
	int saveRelationshipWithBusinessSubSystem(OrderEntity order);

	/**
	 * 保存工单所关联的子工单
	 * 
	 * @param order
	 *            工单
	 * @return
	 */
	int saveRelativeSubOrder(OrderEntity order);

	/**
	 * 更新工单状态
	 * 
	 * @param order
	 *            工单对象
	 * @return
	 */
	int updateStatusAndMsg(OrderEntity order);

	/**
	 * 执行时更新工单
	 * 
	 * @param order
	 *            工单对象
	 * @return
	 */
	int updateForExecute(OrderEntity order);

	/**
	 * 删除工单所关联的子工单
	 * 
	 * @param orderId
	 *            工单编码
	 * @return
	 */
	int removeRelativeSubOrder(String orderId);

	/**
	 * 删除工单和子系统的关系
	 * 
	 * @param orderId
	 *            工单编码
	 * @return
	 */
	int removeRelationshipWithBusinessSubSystem(String orderId);

	List<OrderEntity> listAllBySiteID(@Param("siteId") String siteId);

}
